def numIslands(grid: list[list[str]]) -> int:
    # 检查 grid 是否为空
    if not grid:
        return 0

    def dfs(i, j):
        # 如果越界或者是水域（'0'），直接返回
        if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]) or grid[i][j] == '0':
            return
        # 将当前陆地标记为水域，表示已经访问过
        grid[i][j] = '0'
        # 向上下左右四个方向进行 DFS
        dfs(i-1, j)
        dfs(i+1, j)
        dfs(i, j-1)
        dfs(i, j+1)

    count = 0
    # 遍历整个 grid
    for i in range(len(grid)):
        for j in range(len(grid[0])):
            # 如果发现陆地（'1'），进行 DFS 搜索，找到一个岛屿
            if grid[i][j] == '1':
                dfs(i, j)
                count += 1  # 发现一个岛屿，岛屿数量加 1
    return count

# 示例
grid = [
    ['1', '1', '1', '1', '0'],
    ['1', '1', '0', '1', '0'],
    ['1', '1', '0', '0', '0'],
    ['0', '0', '0', '0', '1']
]
print(numIslands(grid))  # 输出 1
